'use strict';
require('./index.css');
const _mm                  = require('util/mm.js');
const _math                = require('util/math.js');
const _tools          = require('util/tool.js');
const templatePagination   = require('./index.string');
const Pagination = {
    defaults:{
        wrapper:'',//必传
        pageClickNode:'ul.pagination .page',
        pageNumNode:'.page-num',
        prePageNode:'.pre-page',
        nextPageNode:'.next-page',
        firstPageNode:'.first-page',
        endPageNode:'.end-page',
        totalPageNode:'.total-page span',
        pageLimitNode:'.totalCount',
        active:'.active',
        tpl:'',
        dataWrapper:'',
        callbackName:'',
        pageParam:{
            page:1,
            limit:10,
            totalCount:0,//必传
        },
        obj:null,
    },
    tmp:{
        totalPage:0,//总页数
        pageCount:6,//显示几个页码
        pageMax:6,//显示的最大页码
        pageMin:1,//显示的最小页码
        pageHalf:0,//最大页码和最小页码的中间页码
    },
    init:function(options) {
        $.extend(this.defaults, options); 
        // console.log(this.defaults);
        this.renderTpl();
        this.bindEvent();
    },
    renderTpl:function(){
        // console.log('renderTpl');
        $(this.defaults.wrapper).html(templatePagination);
        this.renderPageNum();
    },
    totalPage:function(){
        return  Math.ceil(Calc.Div(this.defaults.pageParam.totalCount,this.defaults.pageParam.limit));
    },
    pageCountHtml:function(){
        let tmpPageNumTpl='';
        for (let i = this.tmp.pageMin; i <= this.tmp.pageMax; i++) {
                tmpPageNumTpl = tmpPageNumTpl + `<li><a href="javascript:;" class="link page page-num ${(i==this.defaults.pageParam.page) ? 'active':''}" data-num="${i}">${i}</a></li>`;
        }
        return tmpPageNumTpl;
    },
    /**
     * [getPageMinMax description]
     * 得到最小页码和最大页码
     */
    getPageMinMax(){
        if (this.tmp.totalPage>=6) {
                if(this.defaults.pageParam.page<3){
                    this.tmp.pageMin = 1;
                    this.tmp.pageMax = 6;
                }else{
                    if(Calc.Add(this.defaults.pageParam.page,3)>=this.tmp.totalPage){
                        this.tmp.pageMin = Calc.Sub(this.tmp.totalPage,5);
                        this.tmp.pageMax = this.tmp.totalPage;
                    }else{
                        this.tmp.pageMin = Calc.Sub(this.defaults.pageParam.page,2);
                        this.tmp.pageMax = Calc.Add(this.defaults.pageParam.page,3);
                    }
                }  
        }else{
            this.tmp.pageMin = 1;
            this.tmp.pageMax = this.tmp.totalPage;
        }
        // console.log('显示的最小页码数:',this.tmp.pageMin);
        // console.log('显示的最大页码数:',this.tmp.pageMax);
        // console.log('显示的当前页码数:',this.defaults.pageParam.page);
    },
    /**
     * [renderPageNum description]
     * 1,确定页码的最大值和最小值，从而确定页码范围
     * 2，当前点击的页码是否位于1的范围
     * 3,不管点击是的哪个页码，都必须满足，当前页码前只有两个页码，页码总个数是6
     * 4，当前页码如果是1,2的情况，当前页码如果是尾页。总之，如果出现不满足的3的情况，该怎么办，此时的页码范围又是怎么样的
     */
    renderPageNum:function(){
        this.tmp.totalPage = this.totalPage();
        this.getPageMinMax();
        $(this.defaults.totalPageNode).html('').html(this.tmp.totalPage);
        $(this.defaults.pageNumNode).parents('li').remove();
        // console.log('显示的页码html为:',this.pageCountHtml());
        $(this.defaults.prePageNode).parents('li').after(this.pageCountHtml());

        $(this.defaults.pageLimitNode).html(this.defaults.pageParam.limit);
    },
    bindEvent:function(){
        let _this=this;
        let sendPageNode = function(e){
            let $this = $(this);
            if($this.hasClass(_this.defaults.prePageNode.substr(1))){
                if(_this.defaults.pageParam.page==1){
                    return false;
                }
                _this.defaults.pageParam.page--;
            }else if($this.hasClass(_this.defaults.nextPageNode.substr(1))){
                if(_this.defaults.pageParam.page==_this.tmp.totalPage){
                   return false;
                }
                 _this.defaults.pageParam.page++;
            }else if($this.hasClass(_this.defaults.firstPageNode.substr(1))){
                if(_this.defaults.pageParam.page == 1){
                    return false;
                }
                _this.defaults.pageParam.page = 1;
            }else if($this.hasClass(_this.defaults.endPageNode.substr(1))){
                if(_this.defaults.pageParam.page == _this.tmp.totalPage){
                    return false;
                }
                _this.defaults.pageParam.page = _this.tmp.totalPage;
            }else{
                if(_this.defaults.pageParam.page == $this.attr('data-num')){
                    return false;
                }
                _this.defaults.pageParam.page = $this.attr('data-num');
            }

           // _this.pageRequest();
            _this.pageRequest2();
        }
        let gotoPage = function(){
            let gotoPageNum = $('.goto-page-num').val();
            // 需要修改为：检查是否为数字，正整数
            if (!_tools.isPositiveInt(gotoPageNum)) {
                _tools.msgShakeLayer('请输入大于0的整数',2000);
                return false;
            }
            if(gotoPageNum >_this.tmp.totalPage){
                _tools.msgShakeLayer('不存在该页数',2000);
                return false;
            }
            _this.defaults.pageParam.page = gotoPageNum;
            // _this.pageRequest();
            _this.pageRequest2();
            
        };

        // 防止多次时间多次绑定至wrapper上，执行多次ajax请求。所以每次绑定前，先取消绑定在wrapper上的click事件
        $(this.defaults.wrapper).off('click',this.defaults.pageClickNode);
        $(this.defaults.wrapper).on('click',this.defaults.pageClickNode,sendPageNode);
        $(this.defaults.wrapper).find('.yes-go').on('click',gotoPage);
        
    },
    oddNumber:function(num){
        return (num%2==0)?num:Calc.Add(num,1);
    },
    pageRequest2(){
        this.defaults.obj[this.defaults.callbackName]()
    }
    
  
}

module.exports = Pagination;